<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: 流年 <liu21st@gmail.com>
// +----------------------------------------------------------------------

// 应用公共文件
// 异常类输出函数
function TApiException($msg = '异常', $errorCode = 999, $code = 400){
    throw new \app\lib\exception\BaseException(['code'=>$code,'msg'=>$msg,'errorCode'=>$errorCode]);
}

// 获取文件完整url
function getFileUrl($url='')
{
    if (!$url) return;
    return url($url,'',false,true);
}

// 获取数组指定key的value
function getValByKey(string $key,array $arr,$default = false)
{
    return array_key_exists($key,$arr) ? $arr[$key] : $default;
}

/**
 * 登录（设置并存储token）
 *
 * @param array $param  参数配置(data,password,tag,expire)
 * @return void
 */
function cms_login(array $param){
    // 获取参数
    $data = getValByKey('data',$param);
    if (!$data) return false;
    // 标签分组
    $tag = getValByKey('tag',$param,'manager');
    //$token = getValByKey('token',$param);
    // 是否返回密码
    $password = getValByKey('password',$param);
    // 登录有效时间 0为永久
    $expire = getValByKey('expire',$param,0);

    $CacheClass = \think\facade\Cache::store(config('cms.'.$tag.'.token.store'));
    // 生成token
    $token = sha1(md5(uniqid(md5(microtime(true)),true)));
    // 拿到当前用户数据
    $user = is_object($data) ?  $data->toArray() : $data;
    // 获取之前并删除token
    // $beforeToken = $CacheClass->get($tag.'_'.$user['id']);
    // // 删除之前token对应的用户信息
    // if ($beforeToken){
    //     cms_logout([
    //         'token'=>$beforeToken,
    //         'tag'=>$tag,
    //         'password'=>$password
    //     ]);
    // }
    // 存储token - 用户数据
    $CacheClass->set($tag.'_'.$token,$user,$expire);
    // 存储用户id - token
    $CacheClass->set($tag.'_'.$user['id'],$token,$expire);
    // 隐藏密码
    if (!$password) unset($user['password']);
    // 返回token
    $user['token'] = $token;
    return $user;
}
/**
 * 数据集组合分类树(多维数组)
 * @param     cate 分类结果集
 * @param     child 子树
 * @return    array
 */
function list_to_tree2($cate,$field = 'pid',$child = 'child',$pid = 0,$callback = false){
    if(!is_array($cate)) return [];
    $arr = [];
    foreach($cate as $v){
        $extra = true;
        if(is_callable($callback)){
            $extra = $callback($v);
        }
        if($v[$field] == $pid && $extra){
            $v[$child] = list_to_tree2($cate,$field,$child,$v['id'],$callback);
            $arr[]     = $v;
        }
    }
    return $arr;
}